/*
 * Selling Partner API for Replenishment
 *
 * The Selling Partner API for Replenishment (Replenishment API) provides programmatic access to replenishment program metrics and offers. These programs provide recurring delivery of any replenishable item at a frequency chosen by the customer.  The Replenishment API is available worldwide wherever Amazon Subscribe & Save is available or is supported. The API is available to vendors and FBA selling partners.
 *
 * The version of the OpenAPI document: 2022-11-07
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = software.amzn.spapi.Client.OpenAPIDateConverter;

namespace software.amzn.spapi.Model.replenishment.v2022_11_07
{
    /// <summary>
    /// An object which contains details about an offer.
    /// </summary>
    [DataContract(Name = "ListOffersResponseOffer")]
    public partial class ListOffersResponseOffer : IValidatableObject
    {

        /// <summary>
        /// Gets or Sets Eligibility
        /// </summary>
        [DataMember(Name = "eligibility", EmitDefaultValue = false)]
        public EligibilityStatus? Eligibility { get; set; }

        /// <summary>
        /// Gets or Sets ProgramType
        /// </summary>
        [DataMember(Name = "programType", EmitDefaultValue = false)]
        public ProgramType? ProgramType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ListOffersResponseOffer" /> class.
        /// </summary>
        /// <param name="sku">The SKU. This property is only supported for sellers and not for vendors..</param>
        /// <param name="asin">The Amazon Standard Identification Number (ASIN)..</param>
        /// <param name="marketplaceId">The marketplace identifier. The supported marketplaces for both sellers and vendors are US, CA, ES, UK, FR, IT, IN, DE and JP. The supported marketplaces for vendors only are BR, AU, MX, AE and NL. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) to find the identifier for the marketplace..</param>
        /// <param name="eligibility">eligibility.</param>
        /// <param name="offerProgramConfiguration">offerProgramConfiguration.</param>
        /// <param name="programType">programType.</param>
        /// <param name="vendorCodes">A list of vendor codes associated with the offer..</param>
        public ListOffersResponseOffer(string sku = default(string), string asin = default(string), string marketplaceId = default(string), EligibilityStatus? eligibility = default(EligibilityStatus?), OfferProgramConfiguration offerProgramConfiguration = default(OfferProgramConfiguration), ProgramType? programType = default(ProgramType?), List<string> vendorCodes = default(List<string>))
        {
            this.Sku = sku;
            this.Asin = asin;
            this.MarketplaceId = marketplaceId;
            this.Eligibility = eligibility;
            this.OfferProgramConfiguration = offerProgramConfiguration;
            this.ProgramType = programType;
            this.VendorCodes = vendorCodes;
        }

        /// <summary>
        /// The SKU. This property is only supported for sellers and not for vendors.
        /// </summary>
        /// <value>The SKU. This property is only supported for sellers and not for vendors.</value>
        [DataMember(Name = "sku", EmitDefaultValue = false)]
        public string Sku { get; set; }

        /// <summary>
        /// The Amazon Standard Identification Number (ASIN).
        /// </summary>
        /// <value>The Amazon Standard Identification Number (ASIN).</value>
        [DataMember(Name = "asin", EmitDefaultValue = false)]
        public string Asin { get; set; }

        /// <summary>
        /// The marketplace identifier. The supported marketplaces for both sellers and vendors are US, CA, ES, UK, FR, IT, IN, DE and JP. The supported marketplaces for vendors only are BR, AU, MX, AE and NL. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) to find the identifier for the marketplace.
        /// </summary>
        /// <value>The marketplace identifier. The supported marketplaces for both sellers and vendors are US, CA, ES, UK, FR, IT, IN, DE and JP. The supported marketplaces for vendors only are BR, AU, MX, AE and NL. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) to find the identifier for the marketplace.</value>
        [DataMember(Name = "marketplaceId", EmitDefaultValue = false)]
        public string MarketplaceId { get; set; }

        /// <summary>
        /// Gets or Sets OfferProgramConfiguration
        /// </summary>
        [DataMember(Name = "offerProgramConfiguration", EmitDefaultValue = false)]
        public OfferProgramConfiguration OfferProgramConfiguration { get; set; }

        /// <summary>
        /// A list of vendor codes associated with the offer.
        /// </summary>
        /// <value>A list of vendor codes associated with the offer.</value>
        [DataMember(Name = "vendorCodes", EmitDefaultValue = false)]
        public List<string> VendorCodes { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ListOffersResponseOffer {\n");
            sb.Append("  Sku: ").Append(Sku).Append("\n");
            sb.Append("  Asin: ").Append(Asin).Append("\n");
            sb.Append("  MarketplaceId: ").Append(MarketplaceId).Append("\n");
            sb.Append("  Eligibility: ").Append(Eligibility).Append("\n");
            sb.Append("  OfferProgramConfiguration: ").Append(OfferProgramConfiguration).Append("\n");
            sb.Append("  ProgramType: ").Append(ProgramType).Append("\n");
            sb.Append("  VendorCodes: ").Append(VendorCodes).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
